/**
 * @file SelectionTool.hpp
 *
 * @date 26/12/2011
 * @author Tales 
 *
 */

#ifndef CONTROLLER_SELECTIONTOOL_HPP_
#define CONTROLLER_SELECTIONTOOL_HPP_

#include "Tool.hpp"
#include <SDL.h>

namespace yep
{
class Graphics;

/**
 * @brief Ferramenta de seleção.
 *
 * Caso o usuário clique fora da area selecionada, ele clica e arrasta para selecionar algo.
 * Caso ele clique dentro ele pode mover a imagem.
 *
 * Se enquanto estiver selecionando, o usuário segurar "Alt", a area original é apagada.
 */
class SelectionTool: public Tool
{
public:
	SelectionTool();

	virtual void start();

	virtual void end();

	virtual void pressed(pair<int, int> pos, bool leftButton, bitset<5> state);

	virtual void released(pair<int, int> pos,bool leftButton, bitset<5> state);

	virtual void moved(pair<int, int> pos, pair<int, int> offset, std::bitset<5> state);

	void notifyPaste();
private:
	void drawRect(Graphics &g, const pair<int, int> &p1, const pair<int, int> &p2);

	void fireCommand();

	bool drawing;
	bool moving;
	pair<int, int> p1, p2;
	SDL_Rect selectedArea;
};

} /* namespace yep */
#endif /* CONTROLLER_SELECTIONTOOL_HPP_ */
